package cn.secby.pay.domain;

import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.baomidou.mybatisplus.annotation.*;
import cn.secby.common.core.annotation.Excel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import cn.secby.common.core.web.domain.BaseEntity;

/**
 * 交易订单对象 tb_trading
 * @author shenkunlin
 * @date 2025-05-08
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName(value = "tb_trading")
public class Trading extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键 */
    @TableId(value ="id" ,type = IdType.ASSIGN_ID )
    @JsonSerialize(using=ToStringSerializer.class)
    private Long id;

    /** 业务系统应用标识 */
    @Excel(name = "业务系统应用标识")
    @TableField(value = "product_app_id")
    private String productAppId;

    /** 业务系统订单号 */
    @Excel(name = "业务系统订单号")
    @TableField(value = "product_order_no")
    private Long productOrderNo;

    /** 交易系统订单号【对于三方来说：商户订单】 */
    @Excel(name = "交易系统订单号【对于三方来说：商户订单】")
    @TableField(value = "trading_order_no")
    private Long tradingOrderNo;

    /** 第三方支付交易号 */
    @Excel(name = "第三方支付交易号")
    @TableField(value = "transaction_id")
    private String transactionId;

    /** 支付渠道【支付宝、微信、现金、免单挂账】 */
    @Excel(name = "支付渠道【支付宝、微信、现金、免单挂账】")
    @TableField(value = "trading_channel")
    private String tradingChannel;

    /** 交易类型【付款、退款、免单、挂账】 */
    @Excel(name = "交易类型【付款、退款、免单、挂账】")
    @TableField(value = "trading_type")
    private String tradingType;

    /** 交易单状态【1-待付款,2-付款中,3-付款失败,4-已结算,5-取消订单,6-免单,7-挂账】 */
    @Excel(name = "交易单状态【1-待付款,2-付款中,3-付款失败,4-已结算,5-取消订单,6-免单,7-挂账】")
    @TableField(value = "trading_state")
    private Integer tradingState;

    /** 收款人姓名 */
    @Excel(name = "收款人姓名")
    @TableField(value = "payee_name")
    private String payeeName;

    /** 收款人账户ID */
    @Excel(name = "收款人账户ID")
    @TableField(value = "payee_id")
    private Long payeeId;

    /** 付款人姓名 */
    @Excel(name = "付款人姓名")
    @TableField(value = "payer_name")
    private String payerName;

    /** 付款人Id */
    @Excel(name = "付款人Id")
    @TableField(value = "payer_id")
    private Long payerId;

    /** 交易金额，单位：元 */
    @Excel(name = "交易金额，单位：元")
    @TableField(value = "trading_amount")
    private BigDecimal tradingAmount;

    /** 退款金额【付款后，单位：元 */
    @Excel(name = "退款金额【付款后，单位：元")
    @TableField(value = "refund")
    private BigDecimal refund;

    /** 是否有退款：YES，NO */
    @Excel(name = "是否有退款：YES，NO")
    @TableField(value = "is_refund")
    private String isRefund;

    /** 第三方交易返回编码【最终确认交易结果】 */
    @Excel(name = "第三方交易返回编码【最终确认交易结果】")
    @TableField(value = "result_code")
    private String resultCode;

    /** 第三方交易返回提示消息【最终确认交易信息】 */
    @Excel(name = "第三方交易返回提示消息【最终确认交易信息】")
    @TableField(value = "result_msg")
    private String resultMsg;

    /** 第三方交易返回信息json【分析交易最终信息】 */
    @Excel(name = "第三方交易返回信息json【分析交易最终信息】")
    @TableField(value = "result_json")
    private String resultJson;

    /** 统一下单返回编码 */
    @Excel(name = "统一下单返回编码")
    @TableField(value = "place_order_code")
    private String placeOrderCode;

    /** 统一下单返回信息 */
    @Excel(name = "统一下单返回信息")
    @TableField(value = "place_order_msg")
    private String placeOrderMsg;

    /** 统一下单返回信息json【用于生产二维码、Android ios唤醒支付等】 */
    @Excel(name = "统一下单返回信息json【用于生产二维码、Android ios唤醒支付等】")
    @TableField(value = "place_order_json")
    private String placeOrderJson;

    /** 商户号 */
    @Excel(name = "商户号")
    @TableField(value = "enterprise_id")
    private Long enterpriseId;

    /** 备注【订单门店，桌台信息】 */
    @Excel(name = "备注【订单门店，桌台信息】")
    @TableField(value = "memo")
    private String memo;

    /** 二维码base64数据 */
    @Excel(name = "二维码base64数据")
    @TableField(value = "qr_code")
    private String qrCode;

    /** open_id标识 */
    @Excel(name = "open_id标识")
    @TableField(value = "open_id")
    private String openId;

    /** 是否有效 */
    @Excel(name = "是否有效")
    @TableField(value = "enable_flag")
    private String enableFlag;

    /** 是否删除  1 未删除  2 已删除 */
    @Excel(name = "是否删除  1 未删除  2 已删除")
    @TableField(value = "is_delete")
    @TableLogic(value = "1", delval = "2")
    private Integer isDelete;

}
